package 第五章继承.object.hashcode;

import 第四章类与对象.员工类.Employee;

import java.time.LocalDate;
import java.util.Objects;
import java.util.function.DoubleBinaryOperator;

//重写继承自Employee的hashcode方法；
public class Employee1 extends Employee {
    public Employee1() {
    }

    public Employee1(String name, double salary, LocalDate hireDay) {
        super(name, salary, hireDay);
    }

    @Override
    public double getSalary() {
        return super.getSalary();
    }

    @Override
    public void setSalary(double salary) {
        super.setSalary(salary);
    }

    @Override
    public void setName(String name) {
        super.setName(name);
    }

    @Override
    public void setHireDay(LocalDate hireDay) {
        super.setHireDay(hireDay);
    }

    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public LocalDate getHireDay() {
        return super.getHireDay();
    }

/*
    //重写hashcode方法；
    //调用Objects的静态方法可以避免null的情况，当为null时返回0；
    @Override
    public int hashCode() {
        return 7 * Objects.hashCode(getName())
                + 11 * Double.hashCode(getSalary())
                + 13 * Objects.hashCode(getHireDay());
    }*/

    //简写的方案
    //Objects中的hash方法，返回一个散列码，由提供的所有的对象的散列码得到；
    //Arrays中的hashCode方法 Arrays.hashCode(xxx[] a);xxx可以是对象或者基本类型；
    @Override
    public int hashCode() {
        return Objects.hash(getName(),getSalary(),getHireDay());
    }

    //注意equals与hashcode的定义必须相容，如果x.equals(y)返回true，那么x.hashCode和y.hashCode返回值必须相同；
}
